#include<stdio.h>
#include<malloc.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
int g_val = 100;

int main(int argc,char* argv[],char* envp[])
{
  pid_t id = fork();
  if(id == 0)
  {
    g_val = 200;
    printf("child: pid: %d,ppid : %d, g_val: %d, &g_val: %p\n",getpid(),getppid(),g_val,&g_val);
    
  }
  else{
    sleep(2);
    printf("father: pid: %d,ppid : %d, g_val: %d, &g_val: %p\n",getpid(),getppid(),g_val,&g_val);
  }

  sleep(1);



  //printf("code addr: %p\n",main);
  //char* str = "hello world";
  //printf("read only addr: %p\n",str);
  //printf("init only addr: %p\n",&g_val);
  //printf("uninit only addr: %p\n",&g_unval);

  //int* p = malloc(10);
  //printf("heap addr: %p\n",p);

  //printf("stack addr: %p\n",&str);
  //printf("stack addr: %p\n",&p);

  //for(int i=0;i<argc;i++)
  //{
  //  printf("args addr: %p\n",argv[i]);
  //}
  //int i=0;
  //while(envp[i]){
  //  printf("env addr: %p\n",envp[i]);
  //  i++;
  //}


  //printf("%s\n",getenv("PATH"));

 // extern char** environ;
 // for(int i=0;environ[i];i++)
 // {
 //   printf("%s\n",environ[i]);
 // }

 // int i=0;
 // while(envp[i]!=NULL){
 //   printf("envp[%d]: %s\n",i,envp[i]);
 //   i++;
 // }
 // if(argc ==2){
 //   if(strcmp(argv[1],"-a") == 0)
 //    {
 //        printf("hello bit\n");
 //    }
 //    else if(strcmp(argv[1],"-b")==0)
 //    {
 //       printf("hello world!\n");

 //    } 
 //    else{
 //        printf("hello default!\n");
 //    }
 // }
 // printf("argc : %d\n",argc);

 // for(int i=0;i<argc;i++)
 // {
 //   printf("argv[%d]: %s\n",i,argv[i]);
 // }
  return 0;
}
